import org.junit.Test;

import static org.junit.Assert.*;

public class NGuessNumberTest{
    @Test
    public  void generateAnswerTest(){

        assertEquals(4, NGuessNumber.generateAnswer().length);
        System.out.println("数字数量为4，正确");

        int[] nums = NGuessNumber.generateAnswer();
        boolean fl = false;
        int numse = 0;

        for (int i=0; i<4; i++){
            if(nums[i]>=0&&nums[i]<=9){
                numse=1;
            }else{
                numse=0;
            }
            for (int l=0; l<=i; l++){
                if(i!=l) {
                    fl = nums[i] != nums[l];
                }
            }
        }
        assertTrue(fl);
        System.out.println("其中无重复数字，正确");

        assertEquals(1,numse);
        System.out.println("数字都在0-9之间，正确");
    }
    @Test
    public void getPlayerInputTest() {
        NGuessNumber.getPlayerInput();
        assertEquals(4, NGuessNumber.gues.length);
        System.out.println("输入的数字数量为4，正确！");
    }
    @Test
    public void compareGuessAnswerTest() {
        int gues []= NGuessNumber.getPlayerInput();
        int ga []= NGuessNumber.generateAnswer();
        int A = 0;
        int B = 0;
        for (int i = 0; i < gues.length; i++) {
            for (int l=0; l < gues.length; l++){
                if(i!=l){
                    if(ga[i]==gues[l]){
                        A++;
                    }
                }else{
                    if(ga[i]==gues[l]){
                        B++;
                    }
                }

            }
        }
        String s = A+"A"+B+"B\n"+"A表示存在且位置正确的数字个数，B表示存在且位置不正确的数字个数！\n"+"如：1A2B,表示你猜测的四个数字有3个是对的，有一个位置对，两个位置不对。";

        assertEquals(s, NGuessNumber.compareGuessAnswer());
        System.out.println("测试比较玩家猜测和答案后，正确!");
    }
    @Test
    public void isWinTest() {
        NGuessNumber n = new NGuessNumber();
        if (n.isWin() == true) {
            assertEquals(true, n.isWin());
            System.out.println("根据提示信息中A的数量判断玩家是否获胜，如果获胜返回true，否则返回false，返回结果类型正确!");
        } else if (n.isWin() == false) {
            assertEquals(false, n.isWin());
            System.out.println("根据提示信息中A的数量判断玩家是否获胜，如果获胜返回true，否则返回false，返回结果类型正确!");
        } else {
            assertEquals(true, n.isWin());
            assertEquals(false, n.isWin());
            System.out.println("根据提示信息中A的数量判断玩家是否获胜，如果获胜返回true，否则返回false，返回结果类型错误!");

        }
    }
}